import java.util.Random;
import java.util.HashSet;
import java.util.Set;

public class CalculationSystemV02 {
    public static void main(String[] args) {
        // 系统标题
        System.out.println("加减法口算练习系统-v0.3");
        System.out.println("======================");

        Random random = new Random();
        int totalQuestions = 50;  // 总题目数量
        int columns = 3;          // 每行显示题目数量
        int addRatio = 60;        // 加法占比(百分比)，剩下的为减法

        // 用于存储已生成的算式，避免重复
        Set<String> questionSet = new HashSet<>();

        int count = 0;
        // 生成指定数量的不重复题目
        while (count < totalQuestions) {
            int num1, num2, result;
            char operator;
            String questionKey;  // 用于判断重复的唯一标识

            // 根据比例决定运算类型
            boolean isAdd = random.nextInt(100) < addRatio;

            if (isAdd) {
                // 加法：确保和不超过100
                num1 = random.nextInt(100);
                num2 = random.nextInt(101 - num1);
                result = num1 + num2;
                operator = '+';
                // 加法的唯一标识（交换数字仍为同一题）
                questionKey = (num1 <= num2 ? num1 + "+" + num2 : num2 + "+" + num1);
            } else {
                // 减法：确保差不小于0
                num1 = random.nextInt(100);
                num2 = random.nextInt(num1 + 1);
                result = num1 - num2;
                operator = '-';
                // 减法的唯一标识（被减数和减数固定顺序）
                questionKey = num1 + "-" + num2;
            }

            // 检查是否重复，不重复则添加并输出
            if (!questionSet.contains(questionKey)) {
                questionSet.add(questionKey);

                // 格式化输出题目（带序号和答案）
                String question = String.format("%d. %d %c %d = %d",
                        (count + 1), num1, operator, num2, result);
                System.out.printf("%-25s", question);

                // 控制换行
                if ((count + 1) % columns == 0) {
                    System.out.println();
                }
                count++;
            }
        }
    }
}